<?php
/**
 * Инстеляци системы.
 * 1) Проверка расширений php и библиотек
 * 2) Устновка параметров для свизи с базой данных, и создания
 *    базы.
 * 3) Установка админ пароля. Вход в систему. Перенапралвиня в админ интерфейс.
 * 
 *
 * @author nrnwest@gmail.com
 *
 */
class Install_IndexController extends Arm_Controller_Action
{
    /**
     * Install_Model_Install
     * 
     * @var  Install_Model_Install
     */
    private $_install;
    
    /**
     * Zend_Session_Namespace
     * @var Zend_Session_Namespace
     */
    private $_session;

    
    public function init()
    {
     $this->_session = new Zend_Session_Namespace('ARM_INSTALL', true);
     if($this->_session === null) {
     $this->_session->step = 0;    
     }    
     if(true === is_file(Arm_Core::getPathApplication() . Install_Model_Install::NAME_FILE_INSTALLLOCK)) {
          $this->_redirect('/');
      }
    $this->_install =  new Install_Model_Install();  
    // Иницилизация темы оформления
     $themes = new Arm_Themes(array(), Arm_Acl::GROUP_GUEST);
     $themes->setOtherThemeModule('install', 'install'); 
    }
    
 /**
  * Начало установки, проверка настроек php
  */
 public function indexAction()
 {
     // проверяем все настройки
     $errorFlag = false;
     $errors = array();
     $errors['version'] = array();
     $errors['iniphp']  = array();
     $errors['ext']     = array();
     // проверка версий
     $version = $this->_install->checkVersion();
     if($version !== true) {
         $errors['version'] = $version;
         $errorFlag = true;
     }
     // проверка настроек php.ini
     $iniphp = $this->_install->checkParamsPhpInit();
     if($iniphp !== true) {
         $errors['iniphp'] = $iniphp;
         $errorFlag = true;
     }
     // проверка расширений php
     $ext = $this->_install->checkExtensionLoaded();
     if($ext !== true) {
         $errors['ext'] = $ext;
         $errorFlag = true;
     }
     
     if($errorFlag === false) {
         // запишем в сессию что шаг 1 пройден.
         $this->_session->step = 1;
     } else {
         $this->view->errors = $errors;
         $this->view->flag = $errorFlag;
     }
  }
 
  
  /**
   * Второй шаго установка базы данных
   */
  public function step2Action()
  {
    // проверим что пройден шаг 1.
    if($this->_session->step < 1) {
        $this->_redirect('/install/');
    }
     
    $form = new Install_Form_Step2();
    $this->view->form = $form;
    if($this->getRequest()->isPost() and $form->isValid($this->getPost())) {
     // все данные есть.   
     $res = $this->_install->createDb($form->getValues());
     if($res !== true) {
         $this->addFlashMessender($res, true);
         $form->setDefaults($form->getValues());
         return;
     }
     // устнавливаем модули
     // выполним проверку если есть модули которые установленны, то не производим автоматическую 
     // Установку модулей. 
     if(Arm_Module::getInstance()->getModulesDb() === array()) {
         $this->_install->installModules();
     }
     // Укажем что нет ошибки
     $this->view->error = false;
     $this->_session->step = 2;
    }
    
  }

  /**
   * Установка админ пароля выполнения входа для него 
   * и переброс на админ интерфейс.
   */
  public function step3Action()
  {
    // проверим что пройден шаг 2.
    if($this->_session->step < 2) {
        $this->_redirect('/install/index/step2');
    }
     $form = new Install_Form_Step3();
     $this->view->form = $form;
    if($this->getRequest()->isPost() and $form->isValid($this->getPost())) {
      // ок система установлена, содаем админа, или обновляем паспорт, логинем его, и перекидываем в admin интерфейс.
      $data =  $form->getValues();
      $this->_install->createAdminAcaunt($data, 1);
      $this->_install->createRobotsFile();
      $this->_install->lock(); 
      $this->_redirect('/admin/');
    }
    
  }
 
}